<template>
  <node :title="config.name" :show-error="showError" :content="content" :error-info="errorInfo"
        @selected="$emit('selected')" @delNode="$emit('delNode')" @insertNode="type => $emit('insertNode', type)"
        placeholder="请设置审批人" header-bgc="#ff943e" header-icon="el-icon-s-check"/>
</template>

<script>
import Node from './Node'

export default {
  name: "ApprovalNode",
  props:{
    config:{
      type: Object,
      default: () => {
        return {}
      }
    }
  },
  components: {Node},
  data() {
    return {
      showError: false,
      errorInfo: '',
    }
  },
  computed:{
    content(){
      const config = this.config.props
      switch (config.assignedType){
        case "ASSIGN_USER":
          if (config.assignedUser.length > 0){
            let texts = []
            config.assignedUser.forEach(org => texts.push(org.name))
            return String(texts).replaceAll(',', '、')
          }else {
            return '请指定审批人'
          }
        case "SELF":
          return '发起人自己'
        case "SELF_SELECT":
          return config.selfSelect.multiple ? '发起人自选多人':'发起人自选一人'
        case "LEADER_TOP":
          return '多级主管依次审批'
        case "LEADER":
          return config.leader.level > 1 ? '发起人的第 ' + config.leader.level + ' 级主管' : '发起人的直接主管'
        case "FORM_USER":
          if (!config.formUser || config.formUser === ''){
            return '表单内联系人（未选择）'
          }else {
            let text = this.getFormItemById(config.formUser)
            if (text && text.title){
              return `表单（${text.title}）内的人员`
            }else {
              return '该表单已被移除😥'
            }
          }
        case "ROLE":
          if (config.role.length > 0){
            return String(config.role).replaceAll(',', '、')
          }else {
            return '指定角色（未设置）'
          }
          default: return '未知设置项😥'
      }
    }
  },
  methods: {
    getFormItemById(id){
      return this.$store.state.design.formItems.find(item => item.id === id)
    },
    //校验数据配置的合法性
    validate(){
      try {
        const assignedType = this.config.props?.assignedType
        console.log('验证审批人节点，类型:', assignedType)
        
        // 根据审批类型调用对应的验证方法
        const isValid = this[`validate_${assignedType}`]()
        
        // 设置错误状态
        this.showError = !isValid
        
        // 返回验证结果（true表示验证通过，false表示验证失败）
        return isValid
      } catch (e) {
        console.error('验证审批人节点时出错:', e)
        this.showError = false
        return true; // 出错时默认通过验证
      }
    },
    validate_ASSIGN_USER(){
      // 指定人员：必须设置审批人
      if(this.config.props?.assignedUser && this.config.props.assignedUser.length > 0){
        this.errorInfo = ''
        return true; // 验证通过
      } else {
        this.errorInfo = '请设置审批人'
        return false; // 验证失败
      }
    },
    validate_SELF_SELECT(){
      // 发起人自选：不需要验证
      this.errorInfo = ''
      return true;
    },
    validate_LEADER_TOP(){
      // 连续多级主管：不需要验证
      this.errorInfo = ''
      return true;
    },
    validate_LEADER(){
      // 主管：不需要验证
      this.errorInfo = ''
      return true;
    },
    validate_ROLE(){
      // 角色：必须设置角色
      if(this.config.props?.role && this.config.props.role.length > 0){
        this.errorInfo = ''
        return true; // 验证通过
      } else {
        this.errorInfo = '请选择系统角色'
        return false; // 验证失败
      }
    },
    validate_SELF(){
      // 发起人自己：不需要验证
      this.errorInfo = ''
      return true;
    },
    validate_FORM_USER(){
      // 表单内联系人：必须选择表单项
      if(this.config.props?.formUser && this.config.props.formUser !== ''){
        this.errorInfo = ''
        return true; // 验证通过
      } else {
        this.errorInfo = '请选择表单联系人项'
        return false; // 验证失败
      }
    },
    validate_REFUSE(){
      // 驳回：不需要验证
      this.errorInfo = ''
      return true;
    },
  }
}
</script>

<style scoped>

</style>
